/**
 1.为空同步 只能使用方法
 2.volatile 读取地址，不读寄存器的变量防止不同步
 3.使用空构造或者反射抛异常
 4.序列化接口
 */
package 第十二章_反射与内省.singleton;

import java.io.Serializable;

public class Singleton implements Serializable {
    private volatile static  Singleton singleton=null;
    private Singleton(){
        if(singleton!=null){
            throw new RuntimeException("此类对象为单例模式,已经被实例化了。");
        }
    }
    public static Singleton getInstance(){
        if(singleton==null){
            synchronized (Singleton.class){
                if(singleton==null){
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}
